package com.zzuli.yxy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzuli.yxy.entity.Album;
import com.zzuli.yxy.result.R;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @auther pony
 * @create 2023-04-04 22:42
 */
public interface AlbumService extends IService<Album> {
    /**
     * 获取专辑管理分页信息
     * @param pageCurrent 当前页
     * @param pageSize 每页条数
     * @param name 关键字 非必传
     * @return
     */
    R getPage(Integer pageCurrent, Integer pageSize, String name);

    /**
     * 更改专辑当前状态
     * @param id 专辑 id
     * @param status 状态码 0：正常 1：异常
     * @return
     */
    void setStatus(Integer id, Integer status);

    /**
     * 添加专辑-添加专辑名、专辑状态、专辑发行时间、专辑发行公司、专辑简介
     * 专辑图片，请参考下面的各自的上传方法
     * @param album
     * @return
     */
    R addAlbum(Album album);

    /**
     * 添加专辑-上传专辑图片
     * 将 专辑图片 文件添加到 云存储桶里
     * 然后将 存储桶专辑图片文件的访问 地址存到数据库里
     * 添加前如果数据库里和云存储桶里已经有这个专辑的 图片访问路径和图片文件本身，先删除
     * @param file 图片
     * @return
     */
    R uploadAddImg(MultipartFile file);

    /**
     * 根据专辑 id，删除专辑
     * 既要删除数据库里的关于此专辑的一切信息
     * 1、专辑数据
     * 2、专辑和歌手、专辑和歌曲关联关系
     * 又要删除专辑在 云存储桶里的 图片 数据
     * @param id 专辑id
     * @return
     */
    R deleteAlbumById(Integer id);

    /**
     * 根据专辑id，查询单个专辑信息
     * @param id 专辑id
     * @return
     */
    R selectOneById(Integer id);

    /**
     * 修改专辑基本信息
     * 只需要修改数据库里的 专辑基本信息
     * 对于 数据库里的信息可以使用 update
     * 对于 云存储桶里 专辑图片，先删除再添加，调用的上传的 api，本接口不需要处理
     * @param album
     * @return
     */
    R updateAlbum(Album album);

    /**
     * 批量删除
     * @param ids 专辑 id数组
     * @return
     */
    R deleteAlbumBatch(List<Integer> ids);

    /**
     * 为 专辑添加歌手信息
     * @param albumId 要添加的专辑id
     * @param singerId  要添加的歌手id ，-1 表示用户没传
     * @return
     */
    R addSingerForAlbum(Integer albumId, Integer singerId);
}
